package rainbowPackage;

import javafx.scene.paint.Paint.*;
import javafx.scene.paint.Color;

public class RainbowSoftColor
{
	ColorSlider black = new ColorSlider( new double[]{0,0,0} );
	ColorSlider white = new ColorSlider( new double[]{255,255,255} );

	ColorSlider color = black;
	ColorSlider tempColor = white;

	TransparencySlider colorTransparency = new TransparencySlider( new double[]{0,0,0,1} );
	TransparencySlider tempColorTransparency = new TransparencySlider( new double[]{255,255,255,1} );

	ColorSlider customColors[] = new ColorSlider[] { new ColorSlider( new double[]{0,0,0} ), new ColorSlider( new double[]{255,255,255} ) };
	TransparencySlider customTransparencyColors[] = new TransparencySlider[] { new TransparencySlider( new double[]{0,0,0,1} ), new TransparencySlider( new double[]{255,255,255,1} ) };

	ColorSlider skyblue = new ColorSlider( new double[]{134,206,249} );
	ColorSlider oxylblue = new ColorSlider( new double[]{0,255,255} );
	ColorSlider pink = new ColorSlider( new double[]{255,64,143} );
	ColorSlider blue = new ColorSlider( new double[]{0,0,192} );
	ColorSlider red = new ColorSlider( new double[]{193,0,0} );
	ColorSlider purple = new ColorSlider( new double[]{122,0,178} );
	ColorSlider orange = new ColorSlider( new double[]{255,134,0} );
	ColorSlider green = new ColorSlider( new double[]{0,133,50} );
	ColorSlider yellow = new ColorSlider( new double[]{246,252,15} );
	ColorSlider teal = new ColorSlider( new double[]{3,224,149} );
	ColorSlider bronze = new ColorSlider( new double[]{152,123,46} );
	ColorSlider silver = new ColorSlider( new double[]{193,192,192} );
	ColorSlider gold = new ColorSlider( new double[]{205,191,44} );
	ColorSlider lime = new ColorSlider( new double[]{126,193,33} );
	ColorSlider brown = new ColorSlider( new double[]{131,103,71} );
	ColorSlider oxylBlue0FF = new ColorSlider( new double[]{0,255,255} );

	public double[] RGB = {0,0,0};// = {0,0,0};
	public double[] ARGB = {0,0,0,1};// = {0,0,0};
	public Color FXColor;
	public double ColorBeingChecked = 0, OpacityBeingChecked = 1, rainbowInterval = 1, rainbowEndsEachLengthOfExtrema = 1, rainbowLengthWOextrema = 1, rainbowAdjustedColorInterval = 1;//, ColorToBeChecked = 0;
	//ColorValueFit colorValueFit = new ColorValueFit(0.);

	public RainbowSoftColor( Color FXColor )
	{
		this.FXColor = FXColor;
		//this.color.RGB = RGB;
		this.color = new ColorSlider( RGB );
		this.colorTransparency = new TransparencySlider( ARGB );
		this.RGB = new double[] { FXColor.getRed() * 255, FXColor.getGreen() * 255, FXColor.getBlue() * 255 };
		this.ARGB = new double[] { FXColor.getRed() * 255, FXColor.getGreen() * 255, FXColor.getBlue() * 255, FXColor.getOpacity() };
	}
	public RainbowSoftColor( double[] ARGB )
	{
		this.ARGB = ARGB;
		for (int z = 0; z <= 2; z++)
			RGB[z] = ARGB[z];
		//this.color.RGB = RGB;
		this.color = new ColorSlider( ARGB );
		this.colorTransparency = new TransparencySlider( ARGB );
		this.FXColor = FXColor.rgb( (int)(ColorValueFitter(RGB[0])), (int)(ColorValueFitter(RGB[1])), (int)(ColorValueFitter(RGB[2])), OpacityValueFitter(ARGB[3]) );
	}
	public RainbowSoftColor()
	{
		this.RGB = new double[]{0,0,0};
		this.ARGB = new double[]{0,0,0,1};
		//this.color.RGB = RGB;
		this.color = new ColorSlider( RGB );
		this.colorTransparency = new TransparencySlider( ARGB );
		this.FXColor = FXColor.rgb( (int)(ColorValueFitter(RGB[0])), (int)(ColorValueFitter(RGB[1])), (int)(ColorValueFitter(RGB[2])), OpacityValueFitter(ARGB[3]) );
	}
	public Object RainbowSoftColorFunction(double SliderInterval, double Loc, RainbowSoftColor ColorBefore, RainbowSoftColor ColorAfter)
	{
		for (int z = 0; z <= 2; z++)
		{
			RGB[z] = ( (ColorAfter.RGB[z] - ColorBefore.RGB[z]) * Loc/SliderInterval + ColorBefore.RGB[z] );
			ARGB[z] = RGB[z];
		}
		ARGB[3] = 1;
		//this.color.RGB = RGB;
		this.color = new ColorSlider( RGB );
		this.colorTransparency = new TransparencySlider( ARGB );
		this.FXColor = FXColor.rgb( (int)(ColorValueFitter(RGB[0])), (int)(ColorValueFitter(RGB[1])), (int)(ColorValueFitter(RGB[2])) );
		return new RainbowSoftColor( RGB );
	}
	public Object RainbowSoftColorFunction(double SliderInterval, double Loc, double BrightnessMultiplyer, RainbowSoftColor ColorBefore, RainbowSoftColor ColorAfter)
	{
		if ( BrightnessMultiplyer < 1)
			for (int z = 0; z <= 2; z++)
				RGB[z] = ( ( (ColorAfter.RGB[z] - ColorBefore.RGB[z]) * Loc/SliderInterval + ColorBefore.RGB[z] ) * BrightnessMultiplyer);
		else
			for (int z = 0; z <= 2; z++)
			{
				RGB[z] = ( ( (ColorAfter.RGB[z] - ColorBefore.RGB[z]) * Loc/0 + ColorBefore.RGB[z] ) );
				RGB[z] = ( (255 - RGB[z]) / BrightnessMultiplyer + RGB[z] );
			}
		for  (int z = 0; z <= 2; z++)
		{
			ARGB[z] = RGB[z];
		}
		ARGB[3] = 1;
		//this.color.RGB = RGB;
		this.color = new ColorSlider( RGB );
		this.colorTransparency = new TransparencySlider( ARGB );
		this.FXColor = FXColor.rgb( (int)(ColorValueFitter(RGB[0])), (int)(ColorValueFitter(RGB[1])), (int)(ColorValueFitter(RGB[2])) );
		return new RainbowSoftColor( RGB );
	}
	public Object RainbowSoftColorRainbowFunction(double RainbowLength, double CoreVariable)
	{
		rainbowInterval = RainbowLength / 6;
		if ( CoreVariable < rainbowInterval)//For Normal Rainbow Use This Instead Of The Others
			color.ColorSliderFunction(rainbowInterval, CoreVariable, red, orange);
		else if ( CoreVariable < 2 * rainbowInterval )
			color.ColorSliderFunction(rainbowInterval, CoreVariable - rainbowInterval, orange, yellow);
		else if ( CoreVariable < 3 * rainbowInterval )		
			color.ColorSliderFunction(rainbowInterval, CoreVariable - 2 * rainbowInterval, yellow, green);
		else if ( CoreVariable < 4 * rainbowInterval )
			color.ColorSliderFunction(rainbowInterval, CoreVariable - 3 * rainbowInterval, green, teal);
		else if ( CoreVariable < 5 * rainbowInterval )
			color.ColorSliderFunction(rainbowInterval, CoreVariable - 4 * rainbowInterval, teal, blue);
		else
			color.ColorSliderFunction(rainbowInterval, CoreVariable - 5 * rainbowInterval, blue, purple);
		this.RGB = color.RGB;
		for  (int z = 0; z <= 2; z++)
		{
			ARGB[z] = RGB[z];
		}
		ARGB[3] = 1;
		this.FXColor = color.ToFXColor();
		return new RainbowSoftColor( color.RGB );
	}
	/*public Object RainbowSoftColorRainbowFunction(double RainbowLength, double CoreVariable, double BrightnessMultiplyer)
	{
		if ( CoreVariable < rainbowInterval)//For Normal Rainbow Use This Instead Of The Others
			color.ColorSliderFunction(rainbowInterval, CoreVariable, red, orange);
		else if ( CoreVariable < 2 * rainbowInterval )
			color.ColorSliderFunction(rainbowInterval, CoreVariable - rainbowInterval, orange, yellow);
		else if ( CoreVariable < 3 * rainbowInterval )		
			color.ColorSliderFunction(rainbowInterval, CoreVariable - 2 * rainbowInterval, yellow, green);
		else if ( CoreVariable < 4 * rainbowInterval )
			color.ColorSliderFunction(rainbowInterval, CoreVariable - 3 * rainbowInterval, green, teal);
		else if ( CoreVariable < 5 * rainbowInterval )
			color.ColorSliderFunction(rainbowInterval, CoreVariable - 4 * rainbowInterval, teal, blue);
		else
			color.ColorSliderFunction(rainbowInterval, CoreVariable - 5 * rainbowInterval, blue, purple);
		if ( BrightnessMultiplyer <= 1 && BrightnessMultiplyer >= 0 )
			for (int z = 0; z <= 2; z++)
				RGB[z] = RGB[z] * BrightnessMultiplyer;
		else
			for (int z = 0; z <= 2; z++)
			{
				RGB[z] = (255 - RGB[z]) / BrightnessMultiplyer + RGB[z];
			}
		//this.FXColor = FXColor.rgb( Math.abs( (int)RGB[0] ), Math.abs( (int)RGB[1] ), Math.abs( (int)RGB[2] ) );
		this.RGB = color.RGB;
		this.FXColor = color.ToFXColor();
		return new RainbowSoftColor( color.RGB );
	}//*/
	public Object RainbowSoftColorRainbowFunctionReverse(double RainbowLength, double CoreVariable)
	{
		rainbowInterval = RainbowLength / 6;
		if ( CoreVariable < rainbowInterval)//For Normal Rainbow Use This Instead Of The Others
			color.ColorSliderFunction(rainbowInterval, CoreVariable, purple, blue);
		else if ( CoreVariable < 2 * rainbowInterval )
			color.ColorSliderFunction(rainbowInterval, CoreVariable - rainbowInterval, blue, teal);
		else if ( CoreVariable < 3 * rainbowInterval )		
			color.ColorSliderFunction(rainbowInterval, CoreVariable - 2 * rainbowInterval, teal, pink);
		else if ( CoreVariable < 4 * rainbowInterval )
			color.ColorSliderFunction(rainbowInterval, CoreVariable - 3 * rainbowInterval, pink, yellow);
		else if ( CoreVariable < 5 * rainbowInterval )
			color.ColorSliderFunction(rainbowInterval, CoreVariable - 4 * rainbowInterval, yellow, orange);
		else
			color.ColorSliderFunction(rainbowInterval, CoreVariable - 5 * rainbowInterval, orange, red);
		this.RGB = color.RGB;
		for  (int z = 0; z <= 2; z++)
		{
			ARGB[z] = RGB[z];
		}
		ARGB[3] = 1;
		this.FXColor = color.ToFXColor();
		return new RainbowSoftColor( color.RGB );
	}
	public Object RainbowSoftColorRainbowFunction(double RainbowLength, double CoreVariable, double[][] RGBcolorArray)
	{
		rainbowInterval = RainbowLength / 6;
		this.customColors = new ColorSlider[RGBcolorArray.length];
		for (int x = 0; x < RGBcolorArray.length; x++)
		{
			this.tempColor = new ColorSlider( RGBcolorArray[x] );
			this.tempColor.set( RGBcolorArray[x] );
			this.customColors[x] = tempColor;
		}
		for (int x = 0; x < RGBcolorArray.length - 1; x++)
		{
			if ( CoreVariable >= rainbowInterval * x && CoreVariable <= rainbowInterval * ( x + 1 ) )//For Custom RGBcolorArray
				color.ColorSliderFunction(rainbowInterval, CoreVariable - rainbowInterval * x, customColors[x], customColors[x + 1]);
		}
		this.RGB = color.RGB;
		for  (int z = 0; z <= 2; z++)
		{
			ARGB[z] = RGB[z];
		}
		ARGB[3] = 1;
		this.FXColor = color.ToFXColor();
		return new RainbowSoftColor( color.RGB );
	}
	public Object RainbowSoftColorRainbowFunction(double RainbowLength, double CoreVariable, Color[] FXcolorArray)
	{
		rainbowInterval = RainbowLength / 6;
		this.customColors = new ColorSlider[FXcolorArray.length];
		for (int x = 0; x < FXcolorArray.length; x++)
		{
			this.tempColor = new ColorSlider( FXcolorArray[x] );
			this.tempColor.set( FXcolorArray[x] );
			this.customColors[x] = tempColor;
		}
		for (int x = 0; x < FXcolorArray.length - 1; x++)
		{
			if ( CoreVariable >= rainbowInterval * x && CoreVariable <= rainbowInterval * ( x + 1 ) )//For Custom RGBcolorArray
				color.ColorSliderFunction(rainbowInterval, CoreVariable - rainbowInterval * x, customColors[x], customColors[x + 1]);
		}
		this.RGB = color.RGB;
		for  (int z = 0; z <= 2; z++)
		{
			ARGB[z] = RGB[z];
		}
		ARGB[3] = 1;
		this.FXColor = color.ToFXColor();
		return new RainbowSoftColor( color.RGB );
	}
	/*public Object RainbowSoftColorRainbowFunctionReverse(double RainbowLength, double CoreVariable, double BrightnessMultiplyer)
	{
		if ( CoreVariable < ( rainbowInterval / ( 2 + Gradations) ) )
			color.ColorSliderFunction(rainbowInterval, CoreVariable, purple, purple);
		else if ( CoreVariable < rainbowInterval)//For Normal Rainbow Use This Instead Of The Others
			color.ColorSliderFunction(rainbowInterval, CoreVariable, purple, blue, Gradations);
		else if ( CoreVariable < ( 2 * rainbowInterval) )
			color.ColorSliderFunction(rainbowInterval, CoreVariable - rainbowInterval, blue, teal, Gradations);
		else if ( CoreVariable < ( 3 * rainbowInterval) )		
			color.ColorSliderFunction(rainbowInterval, CoreVariable - 2 * rainbowInterval, teal, pink, Gradations);
		else if ( CoreVariable < ( 4 * rainbowInterval) )
			color.ColorSliderFunction(rainbowInterval, CoreVariable - 3 * rainbowInterval, pink, yellow, Gradations);
		else if ( CoreVariable < ( 5 * rainbowInterval) )
			color.ColorSliderFunction(rainbowInterval, CoreVariable - 4 * rainbowInterval, yellow, orange, Gradations);
		else if ( CoreVariable < 6 * rainbowInterval - rainbowInterval / ( 2 + Gradations) )
			color.ColorSliderFunction(rainbowInterval, CoreVariable - 5 * rainbowInterval, orange, red, Gradations);
		else
			color.ColorSliderFunction(RainbowLength, CoreVariable, red, red);
		if ( BrightnessMultiplyer <= 1 && BrightnessMultiplyer >= 0 )
			for (int z = 0; z <= 2; z++)
				RGB[z] = RGB[z] * BrightnessMultiplyer;
		else
			for (int z = 0; z <= 2; z++)
			{
				RGB[z] = (255 - RGB[z]) / BrightnessMultiplyer + RGB[z];
			}
		//this.FXColor = FXColor.rgb( Math.abs( (int)RGB[0] ), Math.abs( (int)RGB[1] ), Math.abs( (int)RGB[2] ) );
		this.RGB = color.RGB;
		this.FXColor = color.ToFXColor();
		return new RainbowSoftColor( color.RGB );
	}//*/
	/*public Object RainbowSoftColorRainbowFunction(double RainbowLength, double CoreVariable, int Gradations)
	{
		if ( CoreVariable < ( rainbowInterval / ( 2 + Gradations) ) )
			color.ColorSliderFunction(rainbowInterval, CoreVariable, red, red);
		else if ( CoreVariable < rainbowInterval)//For Normal Rainbow Use This Instead Of The Others
			color.ColorSliderFunction(rainbowInterval, CoreVariable, red, orange, Gradations);
		else if ( CoreVariable < 2 * rainbowInterval )
			color.ColorSliderFunction(rainbowInterval, CoreVariable - rainbowInterval, orange, yellow, Gradations);
		else if ( CoreVariable < 3 * rainbowInterval )		
			color.ColorSliderFunction(rainbowInterval, CoreVariable - 2 * rainbowInterval, yellow, green, Gradations);
		else if ( CoreVariable < 4 * rainbowInterval )
			color.ColorSliderFunction(rainbowInterval, CoreVariable - 3 * rainbowInterval, green, teal, Gradations);
		else if ( CoreVariable < 5 * rainbowInterval )
			color.ColorSliderFunction(rainbowInterval, CoreVariable - 4 * rainbowInterval, teal, blue, Gradations);
		else if ( CoreVariable < 6 * rainbowInterval - rainbowInterval / ( 2 + Gradations) )
			color.ColorSliderFunction(rainbowInterval, CoreVariable - 5 * rainbowInterval, blue, purple, Gradations);
		else
			color.ColorSliderFunction(rainbowInterval, CoreVariable, purple, purple);
		this.RGB = color.RGB;
		this.FXColor = color.ToFXColor();
		return new RainbowSoftColor( RGB );
	}*/
	public Object RainbowSoftColorRainbowFunction(double RainbowLength, double CoreVariable, double BrightnessMultiplyer, int Gradations)
	{
		rainbowInterval = RainbowLength / 6;
		if ( CoreVariable < ( rainbowInterval / ( 2 + Gradations) ) )
			color.ColorSliderFunction(rainbowInterval, CoreVariable, red, red);
		else if ( CoreVariable < rainbowInterval)//For Normal Rainbow Use This Instead Of The Others
			color.ColorSliderFunction(rainbowInterval, CoreVariable, red, orange, Gradations);
		else if ( CoreVariable < 2 * rainbowInterval )
			color.ColorSliderFunction(rainbowInterval, CoreVariable - rainbowInterval, orange, yellow, Gradations);
		else if ( CoreVariable < 3 * rainbowInterval )		
			color.ColorSliderFunction(rainbowInterval, CoreVariable - 2 * rainbowInterval, yellow, green, Gradations);
		else if ( CoreVariable < 4 * rainbowInterval )
			color.ColorSliderFunction(rainbowInterval, CoreVariable - 3 * rainbowInterval, green, teal, Gradations);
		else if ( CoreVariable < 5 * rainbowInterval )
			color.ColorSliderFunction(rainbowInterval, CoreVariable - 4 * rainbowInterval, teal, blue, Gradations);
		else if ( CoreVariable < 6 * rainbowInterval - rainbowInterval / ( 2 + Gradations) )
			color.ColorSliderFunction(rainbowInterval, CoreVariable - 5 * rainbowInterval, blue, purple, Gradations);
		else
			color.ColorSliderFunction(rainbowInterval, CoreVariable, purple, purple);
		if ( BrightnessMultiplyer <= 1 && BrightnessMultiplyer >= 0 )
			for (int z = 0; z <= 2; z++)
				color.RGB[z] = color.RGB[z] * BrightnessMultiplyer;
		else
			for (int z = 0; z <= 2; z++)
			{
				color.RGB[z] = (255 - color.RGB[z]) / BrightnessMultiplyer + color.RGB[z];
			}
		//this.FXColor = FXColor.rgb( Math.abs( (int)RGB[0] ), Math.abs( (int)RGB[1] ), Math.abs( (int)RGB[2] ) );
		this.RGB = color.RGB;
		for  (int z = 0; z <= 2; z++)
		{
			ARGB[z] = RGB[z];
		}
		ARGB[3] = 1;
		this.FXColor = color.ToFXColor();
		return new RainbowSoftColor( color.RGB );
	}
	/*public Object RainbowSoftColorRainbowFunctionReverse(double RainbowLength, double CoreVariable, int Gradations)
	{
		if ( CoreVariable < ( rainbowInterval / ( 2 + Gradations) ) )
			color.ColorSliderFunction(rainbowInterval, CoreVariable, purple, purple);
		else if ( CoreVariable < rainbowInterval)//For Normal Rainbow Use This Instead Of The Others
			color.ColorSliderFunction(rainbowInterval, CoreVariable, purple, blue, Gradations);
		else if ( CoreVariable < ( 2 * rainbowInterval) )
			color.ColorSliderFunction(rainbowInterval, CoreVariable - rainbowInterval, blue, teal, Gradations);
		else if ( CoreVariable < ( 3 * rainbowInterval) )		
			color.ColorSliderFunction(rainbowInterval, CoreVariable - 2 * rainbowInterval, teal, pink, Gradations);
		else if ( CoreVariable < ( 4 * rainbowInterval) )
			color.ColorSliderFunction(rainbowInterval, CoreVariable - 3 * rainbowInterval, pink, yellow, Gradations);
		else if ( CoreVariable < ( 5 * rainbowInterval) )
			color.ColorSliderFunction(rainbowInterval, CoreVariable - 4 * rainbowInterval, yellow, orange, Gradations);
		else if ( CoreVariable < 6 * rainbowInterval - rainbowInterval / ( 2 + Gradations) )
			color.ColorSliderFunction(rainbowInterval, CoreVariable - 5 * rainbowInterval, orange, red, Gradations);
		else
			color.ColorSliderFunction(rainbowInterval, CoreVariable, red, red);
		this.RGB = color.RGB;
		this.FXColor = color.ToFXColor();
		return new RainbowSoftColor( RGB );
	}//*/
	public Object RainbowSoftColorRainbowFunctionReverse(double RainbowLength, double CoreVariable, double BrightnessMultiplyer, int Gradations)
	{
		rainbowInterval = RainbowLength / 6;
		if ( CoreVariable < ( rainbowInterval / ( 2 + Gradations) ) )
			color.ColorSliderFunction(rainbowInterval, CoreVariable, purple, purple);
		else if ( CoreVariable < rainbowInterval)//For Normal Rainbow Use This Instead Of The Others
			color.ColorSliderFunction(rainbowInterval, CoreVariable, purple, blue, Gradations);
		else if ( CoreVariable < ( 2 * rainbowInterval) )
			color.ColorSliderFunction(rainbowInterval, CoreVariable - rainbowInterval, blue, teal, Gradations);
		else if ( CoreVariable < ( 3 * rainbowInterval) )		
			color.ColorSliderFunction(rainbowInterval, CoreVariable - 2 * rainbowInterval, teal, pink, Gradations);
		else if ( CoreVariable < ( 4 * rainbowInterval) )
			color.ColorSliderFunction(rainbowInterval, CoreVariable - 3 * rainbowInterval, pink, yellow, Gradations);
		else if ( CoreVariable < ( 5 * rainbowInterval) )
			color.ColorSliderFunction(rainbowInterval, CoreVariable - 4 * rainbowInterval, yellow, orange, Gradations);
		else if ( CoreVariable < 6 * rainbowInterval - rainbowInterval / ( 2 + Gradations) )
			color.ColorSliderFunction(rainbowInterval, CoreVariable - 5 * rainbowInterval, orange, red, Gradations);
		else
			color.ColorSliderFunction(rainbowInterval, CoreVariable, red, red);

		if ( BrightnessMultiplyer <= 1 && BrightnessMultiplyer >= 0 )
			for (int z = 0; z <= 2; z++)
				color.RGB[z] = color.RGB[z] * BrightnessMultiplyer;
		else
			for (int z = 0; z <= 2; z++)
			{
				color.RGB[z] = (255 - color.RGB[z]) / BrightnessMultiplyer + color.RGB[z];
			}
		//this.FXColor = FXColor.rgb( Math.abs( (int)RGB[0] ), Math.abs( (int)RGB[1] ), Math.abs( (int)RGB[2] ) );
		this.RGB = color.RGB;
		for  (int z = 0; z <= 2; z++)
		{
			ARGB[z] = RGB[z];
		}
		ARGB[3] = 1;
		this.FXColor = color.ToFXColor();
		return new RainbowSoftColor( color.RGB );
	}
	public Object RainbowSoftColorRainbowFunction(double RainbowLength, double CoreVariable, double BrightnessMultiplyer, int Gradations, double[][] RGBcolorArray)
	{
		this.customColors = new ColorSlider[RGBcolorArray.length];
		for (int x = 0; x < RGBcolorArray.length; x++)
		{
			this.tempColor = new ColorSlider( RGBcolorArray[x] );
			this.tempColor.set( RGBcolorArray[x] );
			this.customColors[x] = tempColor;
		}
		for (int x = 0; x < RGBcolorArray.length - 1; x++)
		{
			if ( CoreVariable >= rainbowInterval * x && CoreVariable <= rainbowInterval * ( x + 1 ) )//For Custom RGBcolorArray
				color.ColorSliderFunction(rainbowInterval, CoreVariable - rainbowInterval * x, customColors[x], customColors[x + 1], Gradations);
		}
		if ( BrightnessMultiplyer <= 1 && BrightnessMultiplyer >= 0 )
			for (int z = 0; z <= 2; z++)
				color.RGB[z] = color.RGB[z] * BrightnessMultiplyer;
		else
			for (int z = 0; z <= 2; z++)
			{
				color.RGB[z] = (255 - color.RGB[z]) / BrightnessMultiplyer + color.RGB[z];
			}
		//this.FXColor = FXColor.rgb( Math.abs( (int)RGB[0] ), Math.abs( (int)RGB[1] ), Math.abs( (int)RGB[2] ) );
		this.RGB = color.RGB;
		for  (int z = 0; z <= 2; z++)
		{
			ARGB[z] = RGB[z];
		}
		ARGB[3] = 1;
		this.FXColor = color.ToFXColor();
		return new RainbowSoftColor( color.RGB );
	}
	public Object RainbowSoftColorRainbowFunction(double RainbowLength, double CoreVariable, double BrightnessMultiplyer, int Gradations, Color[] FXcolorArray)
	{
		//System.out.println( "Function FXcolors Brightnesses" + FXcolorArray[0].getBrightness() + FXcolorArray[1].getBrightness() + FXcolorArray[2].getBrightness() + FXcolorArray[3].getBrightness() + FXcolorArray[4].getBrightness() + FXcolorArray[5].getBrightness() );
		//System.out.println("FXcolorArray.length = " + FXcolorArray.length);
		this.customColors = new ColorSlider[FXcolorArray.length];
		for (int x = 0; x < FXcolorArray.length; x++)
		{
			this.tempColor = new ColorSlider( FXcolorArray[x] );
			this.tempColor.set( FXcolorArray[x] );
			this.customColors[x] = tempColor;
		}
		//System.out.println( "customColors[x] R: " + customColors[0].FXColor.getRed() + " G: " + customColors[0].FXColor.getGreen() + " B: " + customColors[0].FXColor.getBlue() +" Brightneess:" + customColors[2].FXColor.getBrightness() + customColors[3].FXColor.getBrightness() + customColors[4].FXColor.getBrightness() + customColors[5].FXColor.getBrightness() );
		for (int x = 0; x < FXcolorArray.length - 1; x++)
		{
			if ( CoreVariable >= rainbowInterval * x && CoreVariable <= rainbowInterval * ( x + 1 ) )//For Custom RGBcolorArray
				color.ColorSliderFunction(rainbowInterval, CoreVariable - rainbowInterval * x, customColors[x], customColors[x + 1], Gradations);
		}
		//System.out.println( "color.RGB = R: " + color.RGB[0] + " G: " + color.RGB[1] + " B: " + color.RGB[2] );
		if ( BrightnessMultiplyer <= 1 && BrightnessMultiplyer >= 0 )
			for (int z = 0; z <= 2; z++)
				color.RGB[z] = color.RGB[z] * BrightnessMultiplyer;
		else
			for (int z = 0; z <= 2; z++)
			{
				color.RGB[z] = (255 - color.RGB[z]) / BrightnessMultiplyer + color.RGB[z];
			}
		//this.FXColor = FXColor.rgb( Math.abs( (int)RGB[0] ), Math.abs( (int)RGB[1] ), Math.abs( (int)RGB[2] ) );
		//System.out.println( "color.RGB = R: " + color.RGB[0] + " G: " + color.RGB[1] + " B: " + color.RGB[2] );
		this.RGB = color.RGB;
		for  (int z = 0; z <= 2; z++)
		{
			ARGB[z] = RGB[z];
		}
		ARGB[3] = 1;
		this.FXColor = color.ToFXColor();
		return new RainbowSoftColor( color.RGB );
	}
	public Object RainbowSoftColorRainbowTransparencyFunction(double RainbowLength, double CoreVariable, double BrightnessMultiplyer, int Gradations, double OpacityBefore, double OpacityAfter)
	{//CHANGE IN ALL
		rainbowInterval = RainbowLength / 6;
		rainbowEndsEachLengthOfExtrema = rainbowInterval / ( 2 + Gradations );
		rainbowLengthWOextrema = RainbowLength - 2 * rainbowEndsEachLengthOfExtrema;
		rainbowAdjustedColorInterval = rainbowLengthWOextrema / 6;
		if ( CoreVariable < rainbowEndsEachLengthOfExtrema )
			colorTransparency.TransparencySliderFunction( rainbowEndsEachLengthOfExtrema, CoreVariable, Gradations, new TransparencySlider (red.RGB), new TransparencySlider (red.RGB), OpacityBefore, ( OpacityAfter - OpacityBefore ) * rainbowEndsEachLengthOfExtrema / RainbowLength + OpacityBefore );
		else if ( CoreVariable < rainbowAdjustedColorInterval + rainbowEndsEachLengthOfExtrema )
			colorTransparency.TransparencySliderFunction( rainbowAdjustedColorInterval, CoreVariable - rainbowEndsEachLengthOfExtrema, Gradations, new TransparencySlider (red.RGB), new TransparencySlider (orange.RGB), ( OpacityAfter - OpacityBefore ) * rainbowEndsEachLengthOfExtrema / RainbowLength + OpacityBefore, ( OpacityAfter - OpacityBefore ) * ( rainbowAdjustedColorInterval + rainbowEndsEachLengthOfExtrema ) / RainbowLength + OpacityBefore );
		else if ( CoreVariable < 2 * rainbowAdjustedColorInterval + rainbowEndsEachLengthOfExtrema )
			colorTransparency.TransparencySliderFunction( rainbowAdjustedColorInterval, CoreVariable - rainbowAdjustedColorInterval - rainbowEndsEachLengthOfExtrema, Gradations, new TransparencySlider (orange.RGB), new TransparencySlider (yellow.RGB), ( OpacityAfter - OpacityBefore ) * ( rainbowAdjustedColorInterval + rainbowEndsEachLengthOfExtrema )/ RainbowLength + OpacityBefore , ( OpacityAfter - OpacityBefore ) * ( 2 * rainbowAdjustedColorInterval + rainbowEndsEachLengthOfExtrema ) / RainbowLength + OpacityBefore );
		else if ( CoreVariable < 3 * rainbowAdjustedColorInterval + rainbowEndsEachLengthOfExtrema )
			colorTransparency.TransparencySliderFunction( rainbowAdjustedColorInterval, CoreVariable - 2 * rainbowAdjustedColorInterval - rainbowEndsEachLengthOfExtrema, Gradations, new TransparencySlider (yellow.RGB), new TransparencySlider (green.RGB), ( OpacityAfter - OpacityBefore ) * ( 2 * rainbowAdjustedColorInterval + rainbowEndsEachLengthOfExtrema ) / RainbowLength + OpacityBefore, ( OpacityAfter - OpacityBefore ) * ( 3 * rainbowAdjustedColorInterval + rainbowEndsEachLengthOfExtrema ) / RainbowLength + OpacityBefore );
		else if ( CoreVariable < 4 * rainbowAdjustedColorInterval + rainbowEndsEachLengthOfExtrema )
			colorTransparency.TransparencySliderFunction( rainbowAdjustedColorInterval, CoreVariable - 3 * rainbowAdjustedColorInterval - rainbowEndsEachLengthOfExtrema, Gradations, new TransparencySlider (green.RGB), new TransparencySlider (teal.RGB),  ( OpacityAfter - OpacityBefore ) * ( 3 * rainbowAdjustedColorInterval + rainbowEndsEachLengthOfExtrema ) / RainbowLength + OpacityBefore, ( OpacityAfter - OpacityBefore ) * ( 4 * rainbowAdjustedColorInterval + rainbowEndsEachLengthOfExtrema ) / RainbowLength + OpacityBefore );
		else if ( CoreVariable < 5 * rainbowAdjustedColorInterval + rainbowEndsEachLengthOfExtrema )
			colorTransparency.TransparencySliderFunction( rainbowAdjustedColorInterval, CoreVariable - 4 * rainbowAdjustedColorInterval - rainbowEndsEachLengthOfExtrema, Gradations, new TransparencySlider (teal.RGB), new TransparencySlider (blue.RGB),  ( OpacityAfter - OpacityBefore ) * ( 4 * rainbowAdjustedColorInterval + rainbowEndsEachLengthOfExtrema ) / RainbowLength + OpacityBefore, ( OpacityAfter - OpacityBefore ) * ( 5 * rainbowAdjustedColorInterval + rainbowEndsEachLengthOfExtrema ) / RainbowLength + OpacityBefore );
		else if ( CoreVariable < 6 * rainbowAdjustedColorInterval + rainbowEndsEachLengthOfExtrema )
			colorTransparency.TransparencySliderFunction( rainbowAdjustedColorInterval, CoreVariable - 5 * rainbowAdjustedColorInterval - rainbowEndsEachLengthOfExtrema, Gradations, new TransparencySlider (blue.RGB), new TransparencySlider (purple.RGB), ( OpacityAfter - OpacityBefore ) * ( 5 * rainbowAdjustedColorInterval + rainbowEndsEachLengthOfExtrema ) / RainbowLength + OpacityBefore, ( OpacityAfter - OpacityBefore ) * ( 6 * rainbowAdjustedColorInterval + rainbowEndsEachLengthOfExtrema ) / RainbowLength + OpacityBefore );
		else
			colorTransparency.TransparencySliderFunction( rainbowEndsEachLengthOfExtrema, CoreVariable - 6 * rainbowAdjustedColorInterval - rainbowEndsEachLengthOfExtrema, Gradations, new TransparencySlider (purple.RGB), new TransparencySlider (purple.RGB),  ( OpacityAfter - OpacityBefore ) * ( 6 * rainbowAdjustedColorInterval + rainbowEndsEachLengthOfExtrema ) / RainbowLength + OpacityBefore, ( OpacityAfter - OpacityBefore ) * ( 7 * rainbowAdjustedColorInterval + rainbowEndsEachLengthOfExtrema ) / RainbowLength + OpacityBefore );
		//colorTransparency.TransparencySliderFunction( (double)( rainbowLength ), (double)(CoreVariable), (double)(1), (int)( Gradations ) /* ( Math.pow( 10 * xSlider / sliderInterval, 3 ) When Not Testing */, new TransparencySlider(green.RGB), new TransparencySlider(teal.RGB), (double)(1), (double)(0) );
		if ( BrightnessMultiplyer <= 1 && BrightnessMultiplyer >= 0 )
			for (int z = 0; z <= 2; z++)
				colorTransparency.ARGB[z] = colorTransparency.ARGB[z] * BrightnessMultiplyer;
		else
			for (int z = 0; z <= 2; z++)
			{
				colorTransparency.ARGB[z] = (255 - colorTransparency.ARGB[z]) / BrightnessMultiplyer + colorTransparency.ARGB[z];
			}
		//this.FXColor = FXColor.rgb( Math.abs( (int)RGB[0] ), Math.abs( (int)RGB[1] ), Math.abs( (int)RGB[2] ) );
		for  (int z = 0; z <= 2; z++)
		{
			RGB[z] = ColorValueFitter(ARGB[z]);
			ARGB[z] = ColorValueFitter(ARGB[z]);
		}
		ARGB[3] = OpacityValueFitter(ARGB[3]);
		this.FXColor = colorTransparency.ToFXColor();
		return new RainbowSoftColor( colorTransparency.ARGB );//colorTransparency.ARGB );
	}
	public Object RainbowSoftColorRainbowTransparencyFunctionReverse(double RainbowLength, double CoreVariable, double BrightnessMultiplyer, int Gradations, double OpacityBefore, double OpacityAfter)
	{//CHANGE IN ALL
		rainbowInterval = RainbowLength / 6;
		rainbowEndsEachLengthOfExtrema = rainbowInterval / ( 2 + Gradations );
		rainbowLengthWOextrema = RainbowLength - 2 * rainbowEndsEachLengthOfExtrema;
		rainbowAdjustedColorInterval = rainbowLengthWOextrema / 6;// / ( ( Gradations + 1 ) * 6 - 2 * Gradations ) ;
		if ( CoreVariable < rainbowEndsEachLengthOfExtrema )
			colorTransparency.TransparencySliderFunction( rainbowEndsEachLengthOfExtrema, CoreVariable, Gradations, new TransparencySlider (purple.RGB), new TransparencySlider (purple.RGB), OpacityBefore, ( OpacityAfter - OpacityBefore ) * rainbowEndsEachLengthOfExtrema / RainbowLength + OpacityBefore );
		else if ( CoreVariable < rainbowAdjustedColorInterval + rainbowEndsEachLengthOfExtrema )
			colorTransparency.TransparencySliderFunction( rainbowAdjustedColorInterval, CoreVariable - rainbowEndsEachLengthOfExtrema, Gradations, new TransparencySlider (purple.RGB), new TransparencySlider (blue.RGB), ( OpacityAfter - OpacityBefore ) * rainbowEndsEachLengthOfExtrema / RainbowLength + OpacityBefore, ( OpacityAfter - OpacityBefore ) * ( rainbowAdjustedColorInterval + rainbowEndsEachLengthOfExtrema ) + OpacityBefore );
		else if ( CoreVariable < 2 * rainbowAdjustedColorInterval + rainbowEndsEachLengthOfExtrema )
			colorTransparency.TransparencySliderFunction( rainbowAdjustedColorInterval, CoreVariable - rainbowAdjustedColorInterval - rainbowEndsEachLengthOfExtrema, Gradations, new TransparencySlider (blue.RGB), new TransparencySlider (teal.RGB), ( OpacityAfter - OpacityBefore ) * ( rainbowAdjustedColorInterval + rainbowEndsEachLengthOfExtrema ) / RainbowLength + OpacityBefore , ( OpacityAfter - OpacityBefore ) * ( 2 * rainbowAdjustedColorInterval + rainbowEndsEachLengthOfExtrema ) / RainbowLength + OpacityBefore );
		else if ( CoreVariable < 3 * rainbowAdjustedColorInterval + rainbowEndsEachLengthOfExtrema )
			colorTransparency.TransparencySliderFunction( rainbowAdjustedColorInterval, CoreVariable - 2 * rainbowAdjustedColorInterval - rainbowEndsEachLengthOfExtrema, Gradations, new TransparencySlider (teal.RGB), new TransparencySlider (pink.RGB), ( OpacityAfter - OpacityBefore ) * ( 2 * rainbowAdjustedColorInterval + rainbowEndsEachLengthOfExtrema ) / RainbowLength + OpacityBefore, ( OpacityAfter - OpacityBefore ) * ( 3 * rainbowAdjustedColorInterval + rainbowEndsEachLengthOfExtrema ) / RainbowLength + OpacityBefore );
		else if ( CoreVariable < 4 * rainbowAdjustedColorInterval + rainbowEndsEachLengthOfExtrema )
			colorTransparency.TransparencySliderFunction( rainbowAdjustedColorInterval, CoreVariable - 3 * rainbowAdjustedColorInterval - rainbowEndsEachLengthOfExtrema, Gradations, new TransparencySlider (pink.RGB), new TransparencySlider (yellow.RGB),  ( OpacityAfter - OpacityBefore ) * ( 3 * rainbowAdjustedColorInterval + rainbowEndsEachLengthOfExtrema ) / RainbowLength + OpacityBefore, ( OpacityAfter - OpacityBefore ) * ( 4 * rainbowAdjustedColorInterval + rainbowEndsEachLengthOfExtrema ) / RainbowLength + OpacityBefore );
		else if ( CoreVariable < 5 * rainbowAdjustedColorInterval + rainbowEndsEachLengthOfExtrema )
			colorTransparency.TransparencySliderFunction( rainbowAdjustedColorInterval, CoreVariable - 4 * rainbowAdjustedColorInterval - rainbowEndsEachLengthOfExtrema, Gradations, new TransparencySlider (yellow.RGB), new TransparencySlider (orange.RGB),  ( OpacityAfter - OpacityBefore ) * ( 4 * rainbowAdjustedColorInterval + rainbowEndsEachLengthOfExtrema ) / RainbowLength + OpacityBefore, ( OpacityAfter - OpacityBefore ) * ( 5 * rainbowAdjustedColorInterval + rainbowEndsEachLengthOfExtrema ) / RainbowLength + OpacityBefore );
		else if ( CoreVariable < 6 * rainbowAdjustedColorInterval + rainbowEndsEachLengthOfExtrema )
			colorTransparency.TransparencySliderFunction( rainbowAdjustedColorInterval, CoreVariable - 5 * rainbowAdjustedColorInterval - rainbowEndsEachLengthOfExtrema, Gradations, new TransparencySlider (orange.RGB), new TransparencySlider (red.RGB), ( OpacityAfter - OpacityBefore ) * ( 5 * rainbowAdjustedColorInterval + rainbowEndsEachLengthOfExtrema ) / RainbowLength + OpacityBefore, ( OpacityAfter - OpacityBefore ) * ( 6 * rainbowAdjustedColorInterval + rainbowEndsEachLengthOfExtrema ) / RainbowLength + OpacityBefore );
		else
			colorTransparency.TransparencySliderFunction( rainbowEndsEachLengthOfExtrema, CoreVariable - 6 * rainbowAdjustedColorInterval - rainbowEndsEachLengthOfExtrema, Gradations, new TransparencySlider (red.RGB), new TransparencySlider (red.RGB),  ( OpacityAfter - OpacityBefore ) * ( 6 * rainbowAdjustedColorInterval + rainbowEndsEachLengthOfExtrema ) / RainbowLength + OpacityBefore, ( OpacityAfter - OpacityBefore ) * ( 7 * rainbowAdjustedColorInterval + rainbowEndsEachLengthOfExtrema ) / RainbowLength + OpacityBefore );
		if ( BrightnessMultiplyer <= 1 && BrightnessMultiplyer >= 0 )
			for (int z = 0; z <= 2; z++)
				colorTransparency.ARGB[z] = colorTransparency.ARGB[z] * BrightnessMultiplyer;
		else
			for (int z = 0; z <= 2; z++)
			{
				colorTransparency.ARGB[z] = (255 - colorTransparency.ARGB[z]) / BrightnessMultiplyer + colorTransparency.ARGB[z];
			}
		//this.FXColor = FXColor.rgb( Math.abs( (int)RGB[0] ), Math.abs( (int)RGB[1] ), Math.abs( (int)RGB[2] ) );
		for  (int z = 0; z <= 2; z++)
		{
			RGB[z] = ColorValueFitter(ARGB[z]);
			ARGB[z] = ColorValueFitter(ARGB[z]);
		}
		ARGB[3] = OpacityValueFitter(ARGB[3]);
		this.FXColor = colorTransparency.ToFXColor();
		return new RainbowSoftColor( colorTransparency.ARGB );
	}
	public Object RainbowSoftColorRainbowTransparencyFunction(double RainbowLength, double CoreVariable, double BrightnessMultiplyer, int Gradations, double[][] ARGBcolorArray, double OpacityBefore, double OpacityAfter)
	{
		rainbowInterval = RainbowLength / ( ARGBcolorArray.length - 1 );
		this.customTransparencyColors = new TransparencySlider[ARGBcolorArray.length];
		for (int x = 0; x < ARGBcolorArray.length; x++)
		{
			this.tempColorTransparency = new TransparencySlider( ARGBcolorArray[x] );
			this.tempColorTransparency.set( ARGBcolorArray[x] );
			this.customTransparencyColors[x] = tempColorTransparency;
		}
		colorTransparency.TransparencySliderFunction(rainbowInterval, CoreVariable, customTransparencyColors[0], customTransparencyColors[0], OpacityBefore, ( OpacityAfter - OpacityBefore ) / ( 2 * customTransparencyColors.length) + OpacityBefore);
		for (int x = 0; x < customTransparencyColors.length - 1; x++)
		{
			if ( CoreVariable >= rainbowInterval * x && CoreVariable <= rainbowInterval * ( x + 1 ) )//For Custom RGBcolorArray
				colorTransparency.TransparencySliderFunction(rainbowInterval, CoreVariable - rainbowInterval * x, Math.round(Gradations / customTransparencyColors.length), customTransparencyColors[x], customTransparencyColors[x + 1], OpacityBefore, OpacityAfter );
		}
		colorTransparency.TransparencySliderFunction(rainbowInterval, CoreVariable, customTransparencyColors[customTransparencyColors.length - 1], customTransparencyColors[customTransparencyColors.length - 1], ( 2 * customTransparencyColors.length - 1 ) * ( OpacityAfter - OpacityBefore ) / (2 * customTransparencyColors.length ) + OpacityBefore, OpacityAfter );
		if ( BrightnessMultiplyer <= 1 && BrightnessMultiplyer >= 0 )
			for (int z = 0; z <= 2; z++)
				colorTransparency.ARGB[z] = colorTransparency.ARGB[z] * BrightnessMultiplyer;
		else
			for (int z = 0; z <= 2; z++)
			{
				colorTransparency.ARGB[z] = (255 - colorTransparency.ARGB[z]) / BrightnessMultiplyer + colorTransparency.ARGB[z];
			}
		//this.FXColor = FXColor.rgb( Math.abs( (int)RGB[0] ), Math.abs( (int)RGB[1] ), Math.abs( (int)RGB[2] ) );
		this.ARGB = colorTransparency.ARGB;
		for  (int z = 0; z <= 2; z++)
		{
			RGB[z] = ColorValueFitter(ARGB[z]);
			ARGB[z] = ColorValueFitter(ARGB[z]);
		}
		ARGB[3] = OpacityValueFitter(ARGB[3]);
		this.FXColor = colorTransparency.ToFXColor();
		return new RainbowSoftColor( colorTransparency.ARGB );
	}
	public Object RainbowSoftColorRainbowTransparencyFunction(double RainbowLength, double CoreVariable, double BrightnessMultiplyer, int Gradations, Color[] FXcolorArray, double OpacityBefore, double OpacityAfter)
	{
		rainbowInterval = RainbowLength / ( FXcolorArray.length - 1 );
		this.customTransparencyColors = new TransparencySlider[FXcolorArray.length];
		for (int x = 0; x < FXcolorArray.length; x++)
		{
			this.tempColorTransparency = new TransparencySlider( FXcolorArray[x] );
			this.tempColorTransparency.set( FXcolorArray[x] );
			this.customTransparencyColors[x] = tempColorTransparency;
		}
		colorTransparency.TransparencySliderFunction(rainbowInterval, CoreVariable, customTransparencyColors[0], customTransparencyColors[0], OpacityBefore, ( OpacityAfter - OpacityBefore ) / ( 2 * customTransparencyColors.length) + OpacityBefore);
		for (int x = 0; x < customTransparencyColors.length - 1; x++)
		{
			if ( CoreVariable >= rainbowInterval * x && CoreVariable <= rainbowInterval * ( x + 1 ) )//For Custom RGBcolorArray
				colorTransparency.TransparencySliderFunction(rainbowInterval, CoreVariable - rainbowInterval * x, Math.round(Gradations / customTransparencyColors.length), customTransparencyColors[x], customTransparencyColors[x + 1], OpacityBefore, OpacityAfter );
		}
		colorTransparency.TransparencySliderFunction(rainbowInterval, CoreVariable, customTransparencyColors[customTransparencyColors.length - 1], customTransparencyColors[customTransparencyColors.length - 1], ( 2 * customTransparencyColors.length - 1 ) * ( OpacityAfter - OpacityBefore ) / (2 * customTransparencyColors.length ) + OpacityBefore, OpacityAfter );
		if ( BrightnessMultiplyer <= 1 && BrightnessMultiplyer >= 0 )
			for (int z = 0; z <= 2; z++)
				colorTransparency.ARGB[z] = colorTransparency.ARGB[z] * BrightnessMultiplyer;
		if ( BrightnessMultiplyer <= 1 && BrightnessMultiplyer >= 0 )
			for (int z = 0; z <= 2; z++)
				colorTransparency.ARGB[z] = colorTransparency.ARGB[z] * BrightnessMultiplyer;
		else
			for (int z = 0; z <= 2; z++)
			{
				colorTransparency.ARGB[z] = (255 - colorTransparency.ARGB[z]) / BrightnessMultiplyer + colorTransparency.ARGB[z];
			}
		//this.FXColor = FXColor.rgb( Math.abs( (int)RGB[0] ), Math.abs( (int)RGB[1] ), Math.abs( (int)RGB[2] ) );
		this.ARGB = colorTransparency.ARGB;
		for  (int z = 0; z <= 2; z++)
		{
			RGB[z] = ColorValueFitter(ARGB[z]);
			ARGB[z] = ColorValueFitter(ARGB[z]);
		}
		ARGB[3] = OpacityValueFitter(ARGB[3]);
		this.FXColor = colorTransparency.ToFXColor();
		return new RainbowSoftColor( colorTransparency.ARGB );
	}
	public Color ToFXColor ()
	{
		this.FXColor = FXColor.rgb( (int)(ColorValueFitter(RGB[0])), (int)(ColorValueFitter(RGB[1])), (int)(ColorValueFitter(RGB[2])), OpacityValueFitter(ARGB[3]) );
		return FXColor;
	}
	public Color ToFXColor ( double[] ARGB )
	{
		this.ARGB = ARGB;
		for (int z = 0; z <= 2; z++)
		{
			RGB[z] = ARGB[z];
		}
		this.color = new ColorSlider( RGB );
		this.colorTransparency = new TransparencySlider ( ARGB );
		this.FXColor = FXColor.rgb( (int)(ColorValueFitter(RGB[0])), (int)(ColorValueFitter(RGB[1])), (int)(ColorValueFitter(RGB[2])), OpacityValueFitter(ARGB[3]) );
		return FXColor;
	}
	//tempFXColor = tempFXColor.rgb((int)color.RGB[0] , Math.abs( (int)color.RGB[1] ), (int)color.RGB[2]).invert();
	public Boolean ColorTooSimilarFunction(int Color1, int Color2)
	{
		Boolean TooSimilar = false;
		int color1A = (Color1 >> 24) & 0xff;
		int color1R = (Color1 >> 16) & 0xff;
		int color1G = (Color1 >> 8) & 0xff;
		int color1B = (Color1) & 0xff;
		int color2A = (Color2 >> 24) & 0xff;
		int color2R = (Color2 >> 16) & 0xff;
		int color2G = (Color2 >> 8) & 0xff;
		int color2B = (Color2) & 0xff;
		/*
		int Color1A = Color1 / 16777216;
		int Color1R = ( Color1 - Color1A * 16777216 ) / 65536;
		int Color1G = ( Color1 - Color1A * 16777216 - Color1R * 65536 ) / 256;
		int Color1B = ( Color1 - Color1A * 16777216 - Color1R * 65536 - Color1G * 256);
		int Color2A = Color2 / 16777216;
		int Color2R = ( Color2 - Color2A * 16777216 ) / 65536;
		int Color2G = ( Color2 - Color2A * 16777216 - Color2R * 65536 ) / 256;
		int Color2B = ( Color2 - Color2A * 16777216 - Color2R * 65536 - Color2G * 256);// */
		int colorDifference = Math.abs(color1R - color2R) + Math.abs(color1G - color2G) + Math.abs(color1B - color2B);
		if ( colorDifference <= 164 )
			TooSimilar = true;
		else
			TooSimilar = false;
		//System.out.println("colorDifference: " + colorDifference);
		//System.out.println(TooSimilar);
		return TooSimilar;
	}
	public Boolean ColorTooSimilarFunction(RainbowSoftColor Color1, RainbowSoftColor Color2)
	{
		Boolean TooSimilar = false;
		int colorDifference = (int)( Math.abs(Color1.RGB[0] - Color2.RGB[0]) + Math.abs(Color1.RGB[1] - Color2.RGB[1]) + Math.abs(Color1.RGB[2] - Color2.RGB[2]) );
		if ( colorDifference <= 164 )
			TooSimilar = true;
		else
			TooSimilar = false;
		//System.out.println("colorDifference: " + colorDifference);
		//System.out.println(TooSimilar);
		return TooSimilar;
	}
	public double ColorValueFitter ( double ColorToBeChecked )
	{
		this.ColorBeingChecked = Math.abs(ColorToBeChecked);
		while ( ColorBeingChecked > 255)
			ColorBeingChecked = ColorBeingChecked - 255;
		return ColorBeingChecked;
	}
	public double OpacityValueFitter ( double OpacityToBeChecked )
	{
		this.OpacityBeingChecked = Math.abs(OpacityToBeChecked);
		while ( OpacityBeingChecked > 1)
			OpacityBeingChecked = OpacityBeingChecked - 1;
		return OpacityBeingChecked;
	}
	public void set(double[] ARGB) { this.ARGB = ARGB; for (int z = 0; z <= 2; z++)	{ RGB[z] = ARGB[z]; } this.FXColor = FXColor.rgb( (int)(ColorValueFitter(RGB[0])), (int)(ColorValueFitter(RGB[1])), (int)(ColorValueFitter(RGB[2])), OpacityValueFitter(ARGB[3])); this.color = new ColorSlider( RGB ); this.colorTransparency = new TransparencySlider ( ARGB ); }
	public void set(Color FXColor) { this.FXColor = FXColor; this.RGB = new double[] { FXColor.getRed() * 255, FXColor.getGreen() * 255, FXColor.getBlue() * 255 }; this.ARGB = new double[] { FXColor.getRed() * 255, FXColor.getGreen() * 255, FXColor.getBlue() * 255, FXColor.getOpacity() }; this.color = new ColorSlider( RGB ); this.colorTransparency = new TransparencySlider ( ARGB ); }
	public Object get() { return RGB; }
	//public Object get() { return FXColor; }
}//*/


/*public class Color(double R, double G, double B)  Color
{
	RGB[0] = R;
	RGB[1] = G;
	RGB[2] = B;
	//return RGB;
}*/
